/*
 * Copyright (c) 2024, Qi Yaolong.
 * dragon@hbu.edu.cn
 * HeBei University, China.
 * 
 * 简体中文
 * 保留所有权利。依据GPL 2.0（以下简称"本许可"）进行许可。除非符合（遵守）本许可及以下条款，否则
 * 您不得使用此文件：
 * 
 * 禁止任何未经授权的个人或组织以任何形式将本程序及其附属资料、创新、创意、架构设计、算法、衍生作品
 * 等用于任何商业目的、盈利活动、各类竞赛(比赛)、直播教学、录播教学、线下课程、书籍编写、教材编写、
 * 会议、培训、公益活动、项目课题、毕业设计、毕业论文、学术论文等。
 * 
 * 本程序由版权持有人和贡献人“按原样”提供，不提供任何明示或暗示担保，包括但不局限于对适销性和特定
 * 用途适合性的暗示担保。在任何情况下，版权持有人或贡献人对因使用本程序而导致的任何直接、间接、附带、
 * 特殊、典型或后果性损害（包括但不限于购买替代商品或服务；使用损失、数据丢失或利润损失；业务中断）
 * 不承担任何责任，无论其如何产生，也不论其责任理论为何，无论是合同、严格责任还是侵权（包括疏忽或
 * 其他），即使已告知此类损害的可能性。
 * 
 * English
 * All rights reserved. Licensed under the GPL 2.0 (the "License"). You may NOT 
 * use this file except in compliance with the License and the following terms:
 * 
 * IT IS PROHIBITED FOR ANY UNAUTHORIZED PERSON OR ENTITY TO USE THIS PROGRAM AND 
 * ITS ANCILLARY DATA, INNOVATIONS, CONCEPTS, ARCHITECTURE DESIGN, ALGORITHMS, 
 * DERIVED WORKS, ETC., IN ANY FORM FOR COMMERCIAL PURPOSES, PROFIT-MAKING 
 * ACTIVITIES, VARIOUS COMPETITIONS (CONTESTS), LIVE TEACHING, PRE-RECORDED 
 * LESSONS, OFFLINE COURSES, BOOK WRITING, CONFERENCES, TRAININGS, PUBLIC WELFARE 
 * ACTIVITIES, PROJECTS, TOPICS, GRADUATION DESIGNS, DISSERTATIONS, THESES, AND 
 * OTHER APPLICATIONS.
 * 
 * THIS PROGRAM IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 * OF THIS PROGRAM, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */

// 环境监测板AHT20数字温湿度传感器接口文件。

#include <stdio.h>      // 标准输入输出
#include <unistd.h>     // POSIX标准接口

#include "ohos_init.h"  // 用于初始化服务(services)和功能(features)
#include "cmsis_os2.h"  // CMSIS-RTOS API V2

#include "iot_gpio.h"   // OpenHarmony HAL：IoT硬件设备操作接口-GPIO
#include "iot_gpio_ex.h"
#include "iot_i2c.h"    // OpenHarmony HAL：IoT硬件设备操作接口-I2C
#include "iot_errno.h"  // OpenHarmony HAL：IoT硬件设备操作接口-错误代码定义

#include "aht20.h"      // AHT20数字温湿度传感器驱动接口
#include "drv_sensor.h"
#include "common.h"


/// @brief 初始化AHT20数字温湿度传感器
void InitTempHumiSensor()
{
    // 初始化GPIO
    IoTGpioInit(IOT_IO_NAME_GPIO_15);   // TXD1
    IoTGpioInit(IOT_IO_NAME_GPIO_16);   // RXD1

    // 设置GPIO-15引脚功能为I2C1_SDA
    IoSetFunc(IOT_IO_NAME_GPIO_15, IOT_IO_FUNC_GPIO_15_I2C1_SDA);
    // 设置GPIO-16引脚功能为I2C1_SCL
    IoSetFunc(IOT_IO_NAME_GPIO_16, IOT_IO_FUNC_GPIO_16_I2C1_SCL);

    // 用指定的波特速率初始化I2C1
    IoTI2cInit(AHT20_I2C_IDX, AHT20_BAUDRATE);

    // 校准AHT20，如果校准失败，等待100ms后重试
    while (IOT_SUCCESS != AHT20_Calibrate())
    {
        osal_printk("AHT20 sensor init failed!\r\n");
        usleep(100 * 1000);
    }
}

/// @brief 获取温湿度值
/// @param[out] temp 温度值
/// @param[out] humi 湿度值
/// @return 成功返回0，失败返回-1
int GetTempHumiLevel(float *temp, float *humi)
{
    // 接收接口的返回值
    uint32_t retval = 0;

    // 启动测量
    retval = AHT20_StartMeasure();
    if (retval != IOT_SUCCESS)
    {
        osal_printk("trigger measure failed!\r\n");
        return -1;
    }

    // 接收测量结果
    retval = AHT20_GetMeasureResult(temp, humi);
    if (retval != IOT_SUCCESS)
    {
        osal_printk("get data failed!\r\n");
        return -1;
    }

    // 输出测量结果
    // osal_printk("temperature: %.2f, humidity: %.2f\r\n", *temp, *humi);

    // 返回成功
    return 0;
}


